package me.ilich.piet.interpreter.commands;

import me.ilich.piet.interpreter.Stack.Context;

public abstract class BinaryCommand implements Command {

	@Override
	public void onExecute(Context context) {
		final int size = context.getStackState().getData().size();
		if(size>=2){
			int a = context.getStackState().getData().get(size-1);
			int b = context.getStackState().getData().get(size-2);
			int c = onBinary(a, b);
			context.getStackState().getData().remove(size-1);
			context.getStackState().getData().remove(size-2);
			context.getStackState().getData().add(Integer.valueOf(c));
		}
	}
	
	protected abstract int onBinary(int a, int b);

}
